【新機能】IAMユーザーをManagement Consoleからクロスアカウントで色々なRoleにスイッチする事ができるようになりました。
こんにちは、せーのです。今日はIAMにできたなかなか面白い機能をご紹介します。IAMで役割(Role)を予め作っておき、AWS Management ConsoleからIAMユーザーをそのRoleにスイッチさせることにより一つのユーザーで様々な役割でのアクセスが可能になる、というものです。
どういう時に使うの
普段IAMユーザーに役割を割り振る時にはその業務別で権限を分けているかと思います。例えばDeveloper(開発者)であれば開発環境には触れるけれども本番環境には触れない、運用担当であれば状態を見ることはできるけども変更することは出来ない、みたいな感じです。 でも一時的に権限を与えたい場合などがあるかと思います。本番環境にシステムをデプロイする時だけはDeveloperにも権限を与えたい、運用担当が軽微な修正点を発見した時はその場で修正できるようにしたい、というような時です。今までであれば本番環境に触れるような一時的なIAMユーザーを作るか、直接権限を変更するか、権限のあるグループに一時的に所属させるか、というような処理を行いました。今回の機能では本番環境に触れるRoleを作っておき、必要な時にそのRoleにスイッチすることで本番環境に触れるようになります。
今回の機能の目玉は、それがクロスアカウントでも実現する、というところにあります。ステージング環境と本番環境でアカウントを分けている方も多いと思いますが、今回の機能を使うことでアカウントをまたいでステージング、本番環境の操作がシームレスに行えます。これは画期的!!またこの機能はIAMユーザーだけではなくシングルサインオンに使用するSAMLを用いたFederatedユーザーにも適用されます。(※1)
概念の理解
一体これはどういう仕組みにもとづいているのでしょう。ポイントは「Assume Role」、プログラムでいうところの「Delegate(移譲)」という概念です。 Assume Roleについてはこちらのブログをご覧になっていただければ理解が深まるかと思います。Delegateとは簡単に言うとオブジェクトに振る舞いを登録することでその振る舞いを他のクラスからすぐに使えるようにする、というような感覚のものです。 つまりまとめると「役割」をIAM Roleに登録しておき、それをIAMユーザーからすぐに使えるようにアクセス許可をしておく、ということです。 ひとつ注意点としては、IAM Roleにスイッチするとスイッチしている間は元々あったIAMユーザーの権限は放棄することになります。IAM Roleとしてのアクションをし終わったら再び元のIAMユーザーの権限に戻ります。
やってみた
準備
では早速やってみましょう。IAMユーザーを一つ作ります。[test_developer]という名前をつけます。この人はdeveloper(開発者)の役割です。
EC2インスタンスを2つ立て[test_develop][test_production]という名前をつけます。IAMポリシーをつけて[test_develop]のみ操作できるように制限をかけます。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:describe*" ], "Sid": "Stmt1373379895000", "Resource": [ "*" ], "Effect": "Allow" }, { "Sid": "Stmt1420608596000", "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": [ "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:instance/i-9fffc66d" ] } ] }
確認します。[test_developer]でログインしてEC2から[test_production]をSTOPしてみます。
権限がないと怒られました。開発者は本番環境には触れません。
Roleの設定
では新機能を試してみましょう。本番環境も触れるIAM Roleを作成します。
Role Typeに「Role for Cross-Account Access」を選択します。
許可するIAMユーザーの所属するアカウントIDを入力しとMFAをつけるかどうかをチェックします。ここで他のアカウントIDを選択するとクロスアカウントが実現します。
許可する権限を選びます。今回はEC2のフルアクセスを与えてみます。
権限内容が表示されます。
最後に確認画面です。このARNは後で使うのでメモっておきましょう。また下のURLはコンソールを使用してスイッチする時に使うものです。
[test_developer]のIAMユーザーを選択し、先程作ったIAM Roleを追加します。これによってIAM Roleを使う事ができます。 Resourceの部分に先程メモったARNをペーストします。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::XXXXXXXXXXXX:role/switchproduction" } }
Actionは「AssumeRole」になるんですね。これで準備はOKです。
使ってみる
では使ってみましょう。[test_developer]でAWS Management Consoleにログインして右上のユーザー名部分をクリックすると新たにSwitch Roleというリンクができています。
最初に機能の紹介画面が出ます。2回目からはこちらは表示されません。新機能っぽくてワクワクしますね。
ロールの切替画面が表示されます。アカウント名、ロール名、表示名、表示色をそれぞれ入力、選択します。
画面右上のユーザー名のところが先程入力した表示名と表示色に変わっています。
では動かしてみます。[test_production]をstopしてみると、、、先程はエラーが出ていましたが今回は見事に動いてくれました!
ちなみに元に戻す時は右上の表示名のところをクリックすると[Back to test_developer]というリンクがありますので、こちらを選択することで元の権限にもどります。
まとめ
いかがでしたでしょうか。これは業務等で複数のAWSアカウントを使う人には欠かせない機能になりそうです。 ちなみに[Role History]の所には使ったRoleが残りますので2回目以降はより簡単に役割を変更することができます。是非お試しください!
参考サイト
- http://aws.amazon.com/releasenotes/4246484738368018
- https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/roles-usingrole-switchconsole.html
- http://aws.amazon.com/jp/blogs/aws/new-cross-account-access-in-the-aws-management-console/
- https://blogs.aws.amazon.com/security/post/Tx2MUS2R3CMGG8H/Enable-a-New-Feature-in-the-AWS-Management-Console-Cross-Account-Access
脚注
※1 - SAMLを用いないFederatedユーザーは現在IAMロールの切り替えが実行できないようです(2015/05/14)